package com.elitel.common.auth;

import com.sun.istack.NotNull;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * @author mulis
 */
@Getter
@Setter
@ConfigurationProperties(prefix = "auth")
@Configuration
public class AuthProperties {

    /**
     * 认证类型
     */
    @NotNull
    private Type type;
    /**
     * 认证中心配置
     */
    @NotNull
    private Center center;
    /**
     * redis配置
     */
    @NotNull
    private AuthRedisConfig redis;
    /**
     * 需要集成认证中心的服务地址
     */
    @NotNull
    private String serverName;
    /**
     * 认证中心登录成功后跳转到的地址
     */
    @NotNull
    private String centerRedirectUrl;
    /**
     * 服务端登录成功后跳转到的地址
     */
    private String serverRedirectUrl;
    /**
     * 不认证的url
     */
    private String regExcludeUrl;
    /**
     * 认证中心获取用户名称的字段
     */
    @NotNull
    private String usernameField;

    /**
     * 验证字段描述
     */
    private String verifyFieldDesc;


    /**
     * 可以跳转的域
     */
    private String domain;

    /**
     * 前后端不分离项目登录页面
     */
    private String loginPage;


    /**
     * 登录字段名
     */
    private String accountFieldName = "account";

    /**
     * 密码字段名
     */
    private String passwordFieldName = "password";

    /**
     * 获取登录成功状态字段
     */
    private String statusField = "success";

    /**
     * 获取登录信息字段
     */
    private String msgField = "msg";


    public enum Type {
        CAS,
        OAUTH2,
        NONE;
    }

    @Getter
    @Setter
    public static class Center {
        private String serverUrlPrefix;
        private String serverLoginUrl;
        private String serverLogoutUrl;
        /**
         * 客户端id
         */
        private String clientId;
        /**
         * 客户端密钥
         */
        private String clientSecret;
        /**
         * 获取token地址
         */
        private String accessTokenUrl;
        /**
         * 刷新token地址
         */
        private String refreshTokenUrl;
        /**
         * 获取用户信息地址
         */
        private String userInfoUrl;
    }

    @Getter
    @Setter
    public static class AuthRedisConfig {
        /**
         * redis host
         */
        private String host = "127.0.0.1";
        /**
         * redis port
         */
        private Integer port = 6379;
        /**
         * redis username
         */
        private String username;
        /**
         * redis password
         */
        private String password;
        /**
         * redis database
         */
        private Integer database = 0;
    }
}
